package com.zhijian.medical.service;

import com.zhijian.medical.entity.dto.PersonDto;
import com.zhijian.medical.entity.po.Product;
import com.zhijian.medical.entity.vo.request.ProductSearchVo;
import com.zhijian.medical.entity.vo.request.ProductSendOutVo;
import com.zhijian.medical.entity.vo.response.ProductVo;
import com.zhijian.medical.util.Page;

import java.util.List;

/**
 * 产品表 业务处理层
 *
 * @author HCG
 * @version 1.0
 * @date 2022-01-17 14:55:39
 */
public interface ProductService {

    /**
     * 主键查询
     *
     * @param id
     * @return
     */
    Product selectById(Long id);

    /**
     * 主键查询vo
     *
     * @param id
     * @return
     */
    ProductVo selectVoById(Long id);

    /**
     * 按照主键删除
     *
     * @param id
     */
    void deleteById(Long id);

    /**
     * 根据id与人员id进行删除
     *
     * @param id
     * @param personId
     */
    void deleteByIdAndPersonId(Long id, Long personId);

    /**
     * 新增
     *
     * @param product
     * @return
     */
    Long insert(Product product);

    /**
     * 更改
     *
     * @param product
     * @return
     */
    boolean update(Product product);

    /**
     * 修改
     *
     * @param record
     * @return
     */
    boolean updateByPrimaryKeySelective(Product record);

    /**
     * 总数
     *
     * @param productSearchVo
     * @return
     */
    Integer count(ProductSearchVo productSearchVo);

    /**
     * 列表
     *
     * @param productSearchVo
     * @return
     */
    List<ProductVo> selectList(ProductSearchVo productSearchVo);

    /**
     * 分页查询
     *
     * @param productSearchVo
     * @return
     */
    Page<ProductVo> selectPage(ProductSearchVo productSearchVo);

    /**
     * 审批
     *
     * @param id
     * @return
     */
    boolean approve(Long id);

    /**
     * 取消
     *
     * @param id
     * @return
     */
    boolean cancel(Long id);

    /**
     * 发货
     *
     * @param productSendOutVo
     * @param isApplyUser      是否是申请人员?
     * @return
     */
    boolean sendOut(ProductSendOutVo productSendOutVo, boolean isApplyUser);

    /**
     * 申请人员自己确认收货
     *
     * @param productSendOutVo
     * @return
     */
    boolean applyUserHarvest(ProductSendOutVo productSendOutVo);

    /**
     * 根据登录人员，添加角色查询条件
     *
     * @param personDto
     * @param productSearchVo
     * @return
     */
    ProductSearchVo checkRoleParam(PersonDto personDto, ProductSearchVo productSearchVo);
}